﻿// -------------------------------------------------------------------------
//    @FileName         :    NFServiceQuest.h
//    @Author           :    gaoyi
//    @Date             :    2025/1/15
//    @Email            :    445267987@qq.com
//    @Module           :    NFServiceQuest
//
// -------------------------------------------------------------------------

#pragma once

#include "E_LoopQuest.nanopb.h"
#include "NFComm/NFCore/NFPlatform.h"

struct LoopQuest;
class NFBagPageOpMgr;
class NFPlayer;

class NFServiceQuest
{
public:
    /**
     * @brief 接受任务
     * @param pPlayer 玩家对象指针
     * @param iQuestId 任务ID
     * @param bNotCheckTeam 是否不检查队伍条件
     * @param bNotNtf 是否不通知客户端
     * @param bNotCheckFinish 是否不检查已完成任务
     * @return 返回操作结果，0表示成功，其他值表示失败
     */
    static int Accept(NFPlayer* pPlayer, int iQuestId, bool bNotCheckTeam = false, bool bNotNtf = false, bool bNotCheckFinish = false);

    /**
     * @brief 完成任务
     * @param pPlayer 玩家对象指针
     * @param iQuestId 任务ID
     * @param iItemId 物品ID
     * @param iItemQuality 物品品质
     * @param uItemGid 物品唯一ID
     * @param iNextQuestId 下一个任务ID，默认为0表示没有后续任务
     * @return 返回操作结果，0表示成功，其他值表示失败
     */
    static int Finish(NFPlayer* pPlayer, int iQuestId, int iItemId, int iItemQuality, uint64_t uItemGid, int iNextQuestId = 0);

    /**
     * @brief 领取任务奖励
     * @param pPlayer 玩家对象指针
     * @param iQuestID 任务ID
     * @param iItemID 物品ID
     * @param iItemQuality 物品品质
     * @param uItemGID 物品唯一ID
     * @return 返回操作结果，0表示成功，其他值表示失败
     */
    static int GetAward(NFPlayer* pPlayer, int iQuestID, int iItemID, int iItemQuality, uint64_t uItemGID);
    static int GetExpRateForLoopQuest(NFPlayer* pPlayer, const E_LoopQuest* pLoopDesc, LoopQuest* pLoop, NFBagPageOpMgr* pBagPageOpMgr, float& expRate);
};
